# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.DriveActivity.V2.Model.DriveActivity do
  @moduledoc """
  A single Drive activity comprising one or more Actions by one or more Actors on one or more Targets. Some Action groupings occur spontaneously, such as moving an item into a shared folder triggering a permission change. Other groupings of related Actions, such as multiple Actors editing one item or moving multiple files into a new folder, are controlled by the selection of a ConsolidationStrategy in the QueryDriveActivityRequest.

  ## Attributes

  *   `actions` (*type:* `list(GoogleApi.DriveActivity.V2.Model.Action.t)`, *default:* `nil`) - Details on all actions in this activity.
  *   `actors` (*type:* `list(GoogleApi.DriveActivity.V2.Model.Actor.t)`, *default:* `nil`) - All actor(s) responsible for the activity.
  *   `primaryActionDetail` (*type:* `GoogleApi.DriveActivity.V2.Model.ActionDetail.t`, *default:* `nil`) - Key information about the primary action for this activity. This is either representative, or the most important, of all actions in the activity, according to the ConsolidationStrategy in the request.
  *   `targets` (*type:* `list(GoogleApi.DriveActivity.V2.Model.Target.t)`, *default:* `nil`) - All Google Drive objects this activity is about (e.g. file, folder, drive). This represents the state of the target immediately after the actions occurred.
  *   `timeRange` (*type:* `GoogleApi.DriveActivity.V2.Model.TimeRange.t`, *default:* `nil`) - The activity occurred over this time range.
  *   `timestamp` (*type:* `DateTime.t`, *default:* `nil`) - The activity occurred at this specific time.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :actions => list(GoogleApi.DriveActivity.V2.Model.Action.t()) | nil,
          :actors => list(GoogleApi.DriveActivity.V2.Model.Actor.t()) | nil,
          :primaryActionDetail => GoogleApi.DriveActivity.V2.Model.ActionDetail.t() | nil,
          :targets => list(GoogleApi.DriveActivity.V2.Model.Target.t()) | nil,
          :timeRange => GoogleApi.DriveActivity.V2.Model.TimeRange.t() | nil,
          :timestamp => DateTime.t() | nil
        }

  field(:actions, as: GoogleApi.DriveActivity.V2.Model.Action, type: :list)
  field(:actors, as: GoogleApi.DriveActivity.V2.Model.Actor, type: :list)
  field(:primaryActionDetail, as: GoogleApi.DriveActivity.V2.Model.ActionDetail)
  field(:targets, as: GoogleApi.DriveActivity.V2.Model.Target, type: :list)
  field(:timeRange, as: GoogleApi.DriveActivity.V2.Model.TimeRange)
  field(:timestamp, as: DateTime)
end

defimpl Poison.Decoder, for: GoogleApi.DriveActivity.V2.Model.DriveActivity do
  def decode(value, options) do
    GoogleApi.DriveActivity.V2.Model.DriveActivity.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.DriveActivity.V2.Model.DriveActivity do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
